﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GeneralLibs;
using Lists;
using CustomSecurity;

namespace ListForms._1Clinic
{
    public partial class UcPhieuInfo : UserControl
    {
        public UcPhieuInfo()
        {
            InitializeComponent();
        }

        //tạo event riêng
        public delegate void OnCheckedChangeBHYT(bool IsChecked);
        public event OnCheckedChangeBHYT CheckedChangeBHYT;

        public Phieu _PhieuClinic = null;
        public EditState _EditState = EditState.Undefined;

        private void Uc_Load(object sender, EventArgs e)
        {
            try
            {
                #region cmbBacSy
                string maNhom = "BacSi";
                cmbBacSy.DataSource = UserList.Instance.GetDanhSachNguoiDungByMaNhom(maNhom).DefaultView;
                cmbBacSy.DisplayColumn = "FullName";
                cmbBacSy.ValueColumn = "ID";
                cmbBacSy.AddVisibleColumn("FullName", "Tên bác sĩ");
                #endregion

                #region cmbThuNgan
                maNhom = "ThuNgan";
                //cmbThuNgan.DataSource = UserList.Instance.GetDanhSachNguoiDungByMaNhom(maNhom).DefaultView;
                cmbThuNgan.DataSource = UserList.Instance.DataTable.DefaultView;
                cmbThuNgan.DisplayColumn = "FullName";
                cmbThuNgan.ValueColumn = "ID";
                cmbThuNgan.AddVisibleColumn("FullName", "Tên thu ngân");
                #endregion

                #region cmbPhongBan
                cmbPhongBan.DataSource = DanhMucDoiTuongNghiepVu.GetDanhMucPhongBan().DataView;
                cmbPhongBan.DisplayColumn = "Ten";
                cmbPhongBan.ValueColumn = "ID";
                cmbPhongBan.AddVisibleColumn("Ma", "Mã", 100, 1);
                cmbPhongBan.AddVisibleColumn("Ten", "Tên", 320, 2);
                #endregion

                dateNgay.EditValue = CommonLib.GetSystemDateTime();

                //Ẩn hiện nhập thẻ BHYT
                lblTheBHYT.Visible = chkCoBHYT.Checked;
                txtSoTheBHYT.Visible = chkCoBHYT.Checked;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }

        }

        public bool CheckFullinfo()
        {
            if (txtMa.Text == "")
            {
                txtMa.Focus();
                throw new CustomException("Chưa điền mã phiếu", ExceptionType.LackOfInputInfo);
            }
            if (chkCoBHYT.Checked && txtSoTheBHYT.Text == "")
            {
                txtSoTheBHYT.Focus();
                throw new CustomException("Chưa số thẻ BHYT của bệnh nhân", ExceptionType.LackOfInputInfo);
            }
            //else if (_EditState == EditState.CreatingNew)
            //{
            //    Phieu thongSo = DanhMucPhieu.Instance.GetByMa(txtMa.Text.Trim());
            //    if (thongSo != null)
            //    {
            //        txtMa.Focus();
            //        throw new CustomException("Mã phiếu này đã tồn tại trong CSDL");
            //    }
            //}
            if (dateNgay.Text == "")
            {
                dateNgay.Focus();
                throw new CustomException("Chưa điền ngày đăng kí", ExceptionType.LackOfInputInfo);
            }
            if (cmbBacSy.EditValue == null || (Guid)cmbBacSy.EditValue == Guid.Empty)
            {
                cmbBacSy.Focus();
                throw new CustomException("Chưa điền thông tin bác sĩ", ExceptionType.LackOfInputInfo);
            }
            if (cmbThuNgan.EditValue == null || (Guid)cmbThuNgan.EditValue == Guid.Empty)
            {
                cmbThuNgan.EditValue = User.CurUser.ID;
            }
            if (cmbPhongBan.EditValue == null || (Guid)cmbPhongBan.EditValue == Guid.Empty)
            {
                cmbPhongBan.Focus();
                throw new CustomException("Chưa điền phòng để bệnh nhân khám", ExceptionType.LackOfInputInfo);
            }

            return true;
        }

        public void SinhSo(string maLoaiPhieu)
        {
            try
            {
                //Sinh mã bệnh nhân luôn
                string prefix = CommonLib.TaoTienToSoPhieuClinicTheoChuan(maLoaiPhieu);
                string ma = CommonLib.GetSoChungTuMacDinhForClinic("Clinic_Phieu", "Ma", prefix);
                txtMa.Text = ma;

                //Số thứ tự theo ngày chính là 4 số cuối đuôi mã

                lblSTT.Text = ma.Substring(ma.Length - 4, 4);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void chkCoBHYT_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (CheckedChangeBHYT != null && chkCoBHYT.Checked is bool) CheckedChangeBHYT(chkCoBHYT.Checked);

                //Ẩn hiện nhập thẻ BHYT
                lblTheBHYT.Visible = chkCoBHYT.Checked;
                txtSoTheBHYT.Visible = chkCoBHYT.Checked;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        public void FillData(Phieu phieu)
        {
            _PhieuClinic = phieu;
            try
            {
                if (CheckedChangeBHYT != null && chkCoBHYT.Checked is bool) CheckedChangeBHYT(chkCoBHYT.Checked);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            txtMa.Text = _PhieuClinic.Ma;
            dateNgay.EditValue = _PhieuClinic.Ngay;
            txtTinhTrangBenh.Text = _PhieuClinic.TinhTrangBenh.ToString();
            cmbBacSy.EditValue = _PhieuClinic.BacSiID;
            cmbThuNgan.EditValue = _PhieuClinic.ThuNganID;
            cmbPhongBan.EditValue = _PhieuClinic.PhongBanID;
            lblSTT.Text = _PhieuClinic.SoThuTuKham.ToString();
            txtGhiChu.Text = _PhieuClinic.GhiChu;

            txtSoTheBHYT.Text = _PhieuClinic.SoTheBHYT;
            chkCoBHYT.Checked = _PhieuClinic.CoBHYT;
            chkDaThuTien.Checked = _PhieuClinic.DaThuTien;
            //if (_PhieuClinic.ChungTuThanhToanID != Guid.Empty)
            //{
            //    DanhSachChungTu dsChungTu = new DanhSachChungTu();
            //    dsChungTu.LoadOneFromDB(_PhieuClinic.ChungTuThanhToanID);
            //    try
            //    {
            //        chkDaThuTien.Text = string.Format("Đã thu tiền (Phiếu thu số: {0})", dsChungTu[0].So);
            //    }
            //    catch (Exception ex)
            //    { }
            //}
            chkDaXuLy.Checked = _PhieuClinic.DaXuLy;
        }
    }
}
